import storage from "@/utils/storage.js";
import Request from "@/libs/luch-request/index.js";
let http = new Request();
// 引入配置
import api from '@/config/api'
// 初始化请求配置
http.setConfig((defaultConfig) => {
	// 没有uuid创建
	if (!storage.getUuid()) {
		storage.setUuid(uni.$u.guid());
	}
	/* defaultConfig 为默认全局配置 */
	defaultConfig.baseURL = api.baseUrl /* 根域名 */
	return defaultConfig
})

/**
 * 请求拦截
 * @param {Object} http
 */
http.interceptors.request.use((config) => { // 可使用async await 做异步操作
	// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
	config.header = {
		platform: uni.$u.os(), // 平台名称
		uuid: storage.getUuid() || uni.$u.guid()
	}
	let token = storage.getAccessToken();
	if (token) {
		config.header.ticketToken = token;
	}
	return config
}, config => { // 可使用async await 做异步操作
	return Promise.reject(config)
})

/**
 * 响应拦截
 * @param {Object} http 
 */
http.interceptors.response.use((response) => {
	/* 对响应成功做点什么 可使用async await 做异步操作*/
	const data = response.data
	// 自定义参数
	if (data.code != 200) { // 服务端返回的状态码不等于0，则reject()
		uni.$emit('z-paging-error-emit'); // 通知paging组件失败了

		uni.$u.toast(data.message || data.msg)
		if (data.code == 401) { // 未登录
			storage.removeUserInfo();
			storage.removeAccessToken();
			uni.clearStorage()
			setTimeout(() => {
				uni.navigateTo({
					url: '/pages/my-sub/login/login',
				})
			}, 2000)

		}
		return Promise.reject(data)
	}
	return data || {}
}, (response) => {
	/*  对响应错误做点什么 （statusCode !== 200）*/
	return Promise.reject(response)
})

export {
	http
};

